/**
 * ItemForm
 * 项目表单,用于新增或编辑项目
 * @type Object
 * @since 1.0 <2015-6-16> SoChishun Added.
 */
var ItemForm = {
    newInstance: function () {
        var obj = {
            /**
             * 表单提交处理方法
             * @param string ifrm_id
             * @since 1.0 <2015-6-16> SoChishun Added.
             * @since 1.1 <2015-7-8> SoChishun 新增是否需要刷新表格的方法 <form data-reload-grid="false" />
             * @since 1.2 <2015-7-10> SoChishun 新增表单提交成功或失败后执行js函数功能 <form data-success-fn="show_reload_tip()" /> (注意,方法名要加参数括号)
             * @since 1.3 <2015-8-3> SoChishun 新增data-before-submit函数 <form data-before-submit="getCheckeds()" />
             * @example $('#' + ifrm_id)[0].contentWindow.item_form.submit(ifrm_id);
             */
            submit: function (ifrm_id) {
                var $form = $('form');
                // 验证表单
                if (!$form.form('validate')) {
                    return;
                }
                var before_submit = $form.data('beforeSubmit');
                if (before_submit) {
                    if (before_submit.indexOf('(') < 0) {
                        before_submit += '()';
                    }
                    eval(before_submit);
                }
                // 是否需要刷新datagrid
                var reload_grid = false === $form.data('reloadGrid') ? false : true;
                // 显示loading
                if (!$form.children("div.datagrid-mask").length) {
                    $('<div class="datagrid-mask" style="display:block"></div>').appendTo($form);
                    var $msg = $('<div class="datagrid-mask-msg" style="display:block;left:50%"></div>').html('正在处理...').appendTo($form);
                    $msg._outerHeight(40);
                    $msg.css({marginLeft: (-$msg.outerWidth() / 2), lineHeight: ($msg.height() + "px")});
                }
                // 动态提交表单
                $.ajax({
                    type: 'POST',
                    dataType: 'JSON',
                    url: $form.attr('action'),
                    data: new FormData($form[0]),
                    processData: false,
                    contentType: false,
                    success: function (msg) {
                        $form.children("div.datagrid-mask-msg, div.datagrid-mask").remove();
                        if (msg.status) {
                            var fn_success = $form.data('successFn');
                            if (fn_success) {
                                if (fn_success.indexOf('(') < 0) {
                                    fn_success += '()';
                                }
                                eval(fn_success);
                            }
                            window.parent.curd_grid.close_iframe_dialog(ifrm_id, reload_grid);
                        } else {
                            $.messager.alert('表单错误', '<div style="color:#F00;font-weight:bold; margin:10px 0px 20px 0px;">请处理以下问题：</div><div style="line-height:18px;">' + msg.info + '</div>', 'error');
                            var fn_fail = $form.data('failFn');
                            if (fn_fail) {
                                if (fn_success.indexOf('(') < 0) {
                                    fn_success += '()';
                                }
                                eval(fn_success);
                            }
                        }
                    },
                    error: function () {
                        $form.children("div.datagrid-mask-msg, div.datagrid-mask").remove();
                        $.messager.alert('警告', '抱歉,表单提交失败,请联系管理员!', 'warning');
                    },
                })
            },
            /**
             * 设置combobox
             * @param string input_id dom选择器
             * @param JSON option 选项
             * @param string errmsg 错误消息
             * @since 1.0 <2015-6-16> SoChishun Added.
             * @example
             * combobox('#outFeeRate, #inFeeRate, #smsFeeRate', {url: $('#outFeeRate').data('url'),queryParams:{value:val}}, '没有费率记录')
             * combobox('#siteID', {disabled: $('[name="id"]').val()}, '没有可用租户ID');
             */
            combobox: function (input_id, option, errmsg) {
                if (!errmsg) {
                    errmsg = '数据读取失败! [' + input_id + ']';
                }
                var config = {
                    valueField: 'id',
                    textField: 'text',
                    url: $(input_id).data('url'),
                    onLoadError: function () {
                        $.messager.alert('警告', errmsg, 'warning');
                    }
                };
                if ($.isPlainObject(option)) {
                    $.extend(config, option);
                }
                $(input_id).combobox(config)
            },
            /**
             * 重新设置父窗口对话框的尺寸
             * @param object size
             * @since 1.0 <2015-6-26> SoChishun Added.
             * @example item_form.resize_owner_dialog({width:525});
             */
            resize_owner_dialog: function (size) {
                window.parent.curd_grid.resize_iframe_dialog(window.name, size);
            },
        }
        return obj;
    }
}